From: Florian Müllner Date: Tue, 15 Apr 2014 15:24:07 +0000 (+0200) Subject: layout: Don't always extend struts to the screen edge X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~2543 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=76c4ec8ee4fa7e712eb9e88d636b43e44ff4d797;p=gnome-shell.git layout: Don't always extend struts to the screen edge NetWM struts are defined in terms of screen edges (rather than monitor edges), which works poorly with vertical monitor layouts (as it renders entire monitors unusable). Don't extend struts in those cases. https://bugzilla.gnome.org/show_bug.cgi?id=663690 --- diff --git a/js/ui/layout.js b/js/ui/layout.js index 80428a586..c1fdc7446 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -1018,19 +1018,39 @@ const LayoutManager = new Lang.Class({ continue; // Ensure that the strut rects goes all the way to the screen edge, - // as this really what mutter expects. + // as this really what mutter expects. However skip this step + // in cases where this would render an entire monitor unusable. switch (side) { case Meta.Side.TOP: - y1 = 0; + let hasMonitorsAbove = this.monitors.some(Lang.bind(this, + function(mon) { + return this._isAboveOrBelowPrimary(mon) && + mon.y < primary.y; + })); + if (!hasMonitorsAbove) + y1 = 0; break; case Meta.Side.BOTTOM: - y2 = global.screen_height; + if (this.primaryIndex == this.bottomIndex) + y2 = global.screen_height; break; case Meta.Side.LEFT: - x1 = 0; + let hasMonitorsLeft = this.monitors.some(Lang.bind(this, + function(mon) { + return !this._isAboveOrBelowPrimary(mon) && + mon.x < primary.x; + })); + if (!hasMonitorsLeft) + x1 = 0; break; case Meta.Side.RIGHT: - x2 = global.screen_width; + let hasMonitorsRight = this.monitors.some(Lang.bind(this, + function(mon) { + return !this._isAboveOrBelowPrimary(mon) && + mon.x > primary.x; + })); + if (!hasMonitorsRight) + x2 = global.screen_width; break; }